package management;

import java.io.Serializable;

/**
 * 成绩类：关联学生和课程，体现“成绩是学生与课程的关联桥梁”
 */
public class Score implements Serializable {
    private static final long serialVersionUID = 3L;
    
    private Student student;    // 关联的学生（N:1关系）
    private Course course;      // 关联的课程（N:1关系）
    private double score;       // 成绩分数（0-100）

    // 构造方法：校验分数范围，抛出自定义异常
    public Score(Student student, Course course, double score) throws InvalidScoreException {
        // 严格校验分数：小于0或大于100均抛出异常
        if (score < 0) {
            throw new InvalidScoreException("成绩不能为负数，当前值：" + score);
        }
        if (score > 100) {
            throw new InvalidScoreException("成绩不能超过100分，当前值：" + score);
        }
        this.student = student;
        this.course = course;
        this.score = score;
        // 同步维护关联关系：添加成绩时，自动关联到学生和课程的成绩列表
        student.addStudentScore(this);
        course.addCourseScore(this);
    }

    // Getter
    public Student getStudent() { return student; }
    public Course getCourse() { return course; }
    public double getScore() { return score; }

    // 重写toString：清晰展示关联关系
    @Override
    public String toString() {
        return student.getName() + "（学号：" + student.getStudentId() + "）- " + 
               course.getName() + "（编号：" + course.getCourseId() + "）：" + score + "分";
    }
}